#include <string.h> //字符串操作函数，例如 strcpy, strlen, strcmp。
#include <stdio.h>  //标准输入输出函数，例如 printf, scanf, fopen, fread。
#include <stdlib.h> //动态内存分配、进程控制，例如 malloc, free, exit。
#include <stdint.h>
#include <stdbool.h>
#include <fcntl.h>     //文件控制和操作，例如 open, fcntl, creat
#include <sys/wait.h>  //进程等待函数，例如 wait, waitpid。
#include <sys/ioctl.h> //I/O控制命令，例如 ioctl。
#include <sys/types.h> //定义数据类型，例如 pid_t, off_t。
#include <unistd.h>    //POSIX 标准 API，例如 fork, exec, read, write。
#include <math.h>      //数学函数，例如 sin, cos, sqrt, pow
#include <errno.h>     //定义全局变量 errno 和错误代码。
#include <assert.h>    //运行时断言检查，例如 assert()。
#include <ctype.h>     //字符分类和转换，例如 isalpha, isdigit, toupper

#include <pthread.h>   //POSIX线程库，例如 pthread_create, pthread_mutex_lock。
#include <semaphore.h> //信号量，例如 sem_init, sem_wait, sem_post。

#include <sys/socket.h> //套接字接口，例如 socket, connect, bind。
#include <netinet/in.h> //Internet地址族，例如 sockaddr_in。
#include <arpa/inet.h>  //网络地址转换，例如 inet_pton, inet_ntoa。
#include <netdb.h>      //网络数据库操作，例如 gethostbyname, getaddrinfo。

#include <poll.h>         //poll接口
#include <sys/select.h>   //select接口
#include <sys/epoll.h>    //epoll接口
#include <sys/shm.h>      //共享内存
#include <sys/msg.h>      // 消息队列
#include <sys/ipc.h>      //System V IPC的键生成。
#include <sys/mman.h>     //内存映射,例如 mmap, munmap。
#include <signal.h>       //信号处理，例如 signal, sigaction, kill
#include <endian.h>       //主机字节序和网络字节序转换，例如 htons, ntohl。
#include <sys/random.h>   //随机数生成，例如 getrandom。
#include <linux/limits.h> //系统限制，例如路径长度 PATH_MAX。

#include <syslog.h> //日志记录，例如 syslog, openlog。

int main()
{
    // 创建并打开文件
    int fd = open("test.txt", O_RDWR | O_CREAT, 0666);
    if (fd == -1)
    {
        perror("open");
        return -1;
    }

    // 写入数据
    char *write_buf = "Hello World!\n";
    ssize_t write_bytes = write(fd, write_buf, strlen(write_buf));
    if (write_bytes == -1)
    {
        perror("write");
        close(fd);
        return -1;
    }

    // 将文件指针移动到开头
    if (lseek(fd, 0, SEEK_SET) == -1)
    {
        perror("lseek");
        close(fd);
        return -1;
    }

    // 读取数据
    char read_buf[128] = {0};
    ssize_t read_bytes = read(fd, read_buf, sizeof(read_buf) - 1);
    if (read_bytes == -1)
    {
        perror("read");
        close(fd);
        return -1;
    }
    read_buf[read_bytes] = '\0';
    printf("读取的内容: %s", read_buf);

    // 获取文件状态
    struct stat st;
    if (fstat(fd, &st) == -1)
    {
        perror("fstat");
        close(fd);
        return -1;
    }
    printf("文件大小: %ld bytes\n", st.st_size);

    // 关闭文件
    close(fd);

    // 重命名文件
    if (rename("test.txt", "test_new.txt") == -1)
    {
        perror("rename");
        return -1;
    }

    // 删除文件
    if (unlink("test_new.txt") == -1)
    {
        perror("unlink");
        return -1;
    }

    return 0;
}
